package cn.com.huzo.repository.master;

import cn.com.huzo.model.entities.master.CustomerEntity;
import huzofw.repository.GenericRepository;
import java.util.List;
import java.util.Map;

/**
 * 客户数据访问对象接口。
 *
 * @author 吴旭
 */
public interface CustomerRepository extends GenericRepository<CustomerEntity, Long> {

    /**
     * 根据给定ID取得客户信息对象。
     *
     * @param rootNodeName 客户目录根节点名称
     * @param key          客户标识
     * @return 客户信息对象
     */
    CustomerEntity fetchByKey(String rootNodeName, Long key);

    /**
     * 根据给定客户编号取得客户信息对象。
     *
     * @param rootNodeName 部门根节点名称
     * @param customerNo   客户编号
     * @return 客户信息对象
     */
    CustomerEntity fetchByCustomerNo(String rootNodeName, String customerNo);

    /**
     * 取得客户表的字段名称列表。
     *
     * @return 字段名称和汉字描述列表
     */
    List<CustomerEntity> fetchAllFields();

    /**
     * 根据给定导出条件取得客户信息对象。
     *
     * <p>
     * @param filters 导出过滤条件
     * @return 客户信息对象
     */
    List<String> fetchExportData(Map<String, Object> filters);

    /**
     * 批量更新客户所属目录。
     *
     * @param itemList 要更新的客户数据列表
     * @return 影响的行数
     */
    Integer batchChangeCatalogue(List<CustomerEntity> itemList);
}
